package DA;

import BE.BEZona;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class DAZona
{
    //MANTENIMIENTO
    public ResultSet buscarZona(BEZona zona, int tipoBusqueda)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        ResultSet rs = null;
        Statement s = null;
        String query = "SELECT z.IDZONAS, z.NOMBRE, z.CANTRACKS, z.DESCRIPCION, " +
                               "z.ESTADO, t.TIPO " +
                       "FROM ZONAS z, TIPOPRODUCTO t " +
                       "WHERE z.IDTIPOPRODUCTO = t.IDTIPOPRODUCTO AND z.NOMBRE LIKE '%"+
                       zona.getNombre()  +"%'";

        if (zona.getEstado() != 2)
            query += " AND z.ESTADO = '" + zona.getEstado() + "'";
        if (zona.getIdTipo()>0)
            query += " AND z.IDTIPOPRODUCTO = " + zona.getIdTipo();

        if (tipoBusqueda == 0 ) //busqueda de todos los datos
            query = "SELECT z.IDZONAS, z.NOMBRE, z.CANTRACKS, z.DESCRIPCION, " +
                           "z.ESTADO, t.TIPO " +
                    "FROM ZONAS z, TIPOPRODUCTO t " +
                    "WHERE z.IDTIPOPRODUCTO = t.IDTIPOPRODUCTO";
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos",
                                          "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }
        bd.cierraConexion(con);
        return rs;
    }

    public int agregarZona (BEZona zona)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        PreparedStatement s = null;
        String query = "INSERT INTO ZONAS (NOMBRE,CANTRACKS,DESCRIPCION,ESTADO,IDTIPOPRODUCTO) " +
                       "VALUES ('" + zona.getNombre() + "'," + zona.getCantRack() + ",'" +
                       zona.getDescripcion() + "','" + zona.getEstado() + "'," + zona.getIdTipo() + ")";
        try
        {
           con = bd.conectar();
           s = con.prepareStatement(query);
            s.executeUpdate();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de insertar datos",
                        "Error",JOptionPane.ERROR_MESSAGE);

            bd.cierraConexion(con);
            return 1;
        }

        bd.cierraConexion(con);
        return 0;
    }

    public boolean existeNombre (String nombre)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        ResultSet rs = null;
        Statement s = null;
        String query = "SELECT COUNT(IDZONAS) AS CANTIDAD "
                     + "FROM ZONAS WHERE NOMBRE = '" + nombre + "'";

        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);

            rs.next();
            if (rs.getInt("CANTIDAD") > 0)
                return true;
        } catch (Exception e) {
            bd.cierraConexion(con);
            return false;
        }

        bd.cierraConexion(con);
        return false;
    }

    //ELIMINAR
    public int eliminarZona (int idZona)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        String query = "UPDATE ZONAS SET ESTADO = '0' WHERE IDZONAS = " + idZona;
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            s.executeUpdate(query);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de borrar datos",
                                          "Error",JOptionPane.ERROR_MESSAGE);
            
            bd.cierraConexion(con);
            return 1;
        }

        bd.cierraConexion(con);
        return 0;
    }

    //MODIFICAR
    public BEZona getZonabyId (int idZona)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;

        BEZona zona = null;
        String query = "SELECT * FROM ZONAS WHERE IDZONAS = " + idZona;

        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);

            rs.next();
            zona = new BEZona();
            zona.setIdZona(rs.getInt("IDZONAS"));
            zona.setNombre(rs.getString("NOMBRE"));
            zona.setCantRack(rs.getInt("CANTRACKS"));
            zona.setDescripcion(rs.getString("DESCRIPCION"));
            zona.setIdTipo(rs.getInt("IDTIPOPRODUCTO"));
        }
        catch (Exception e)
        {
          JOptionPane.showMessageDialog(null,"Error al obtener zona",
                                          "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }

        bd.cierraConexion(con);
        return zona;
    }

    public int modificaZona (BEZona zona)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        String query = "UPDATE ZONAS SET NOMBRE = '" + zona.getNombre() +
                       "', DESCRIPCION = '" + zona.getDescripcion() + "',"
                     + " IDTIPOPRODUCTO = " + zona.getIdTipo() + " WHERE " +
                       "IDZONAS = " + zona.getIdZona();
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            s.executeUpdate(query);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de actualizar datos",
                                               "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return 1;
        }

        bd.cierraConexion(con);
        return 0;
    }

    public ArrayList<BEZona> obtenerZonas() {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;
        String query = "Select * from zonas";
        ArrayList<BEZona> lstZonas= new ArrayList<BEZona>();
        try
        {
            con = bd.conectar();
            PreparedStatement p=con.prepareStatement(query);
            rs=p.executeQuery();
            
            while(rs.next())
            {
                BEZona objZona= new BEZona();
                
                objZona.setIdZona(rs.getInt("idzonas"));
                objZona.setNombre(rs.getString("nombre"));
                objZona.setCantRack(rs.getInt("cantracks"));
                objZona.setDescripcion(rs.getString("descripcion"));
                objZona.setEstado(rs.getInt("estado"));
                objZona.setIdTipo(rs.getInt("idtipoproducto"));
                
                lstZonas.add(objZona);
                
            }
            
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de actualizar datos",
                                               "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }

        bd.cierraConexion(con);
        return lstZonas;
        
    }



    public BEZona obtenerZonasByTipo(int idtipo) {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;
        String query = "Select * from zonas where idtipoproducto=" +idtipo;
        BEZona lstZonas= new BEZona();
        try
        {
            con = bd.conectar();
            PreparedStatement p=con.prepareStatement(query);
            rs=p.executeQuery();

            rs.next();
                BEZona objZona= new BEZona();

                objZona.setIdZona(rs.getInt("idzonas"));
                objZona.setNombre(rs.getString("nombre"));
                objZona.setCantRack(rs.getInt("cantracks"));
                objZona.setDescripcion(rs.getString("descripcion"));
                objZona.setEstado(rs.getInt("estado"));
                objZona.setIdTipo(rs.getInt("idtipoproducto"));

               
            

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de actualizar datos",
                                               "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }

        bd.cierraConexion(con);
        return lstZonas;

    }

    public void agregarZonaCargaMasiva(BEZona zona) {
        DAConexion bd = new DAConexion();
        Connection con = null;
        PreparedStatement s = null;
        String query = "INSERT INTO ZONAS (idzonas,NOMBRE,CANTRACKS,DESCRIPCION,ESTADO,IDTIPOPRODUCTO) " +
                       "VALUES ("+zona.getIdZona() +",'" + zona.getNombre() + "'," + zona.getCantRack() + ",'" +
                       zona.getDescripcion() + "','" + zona.getEstado() + "'," + zona.getIdTipo() + ")";
        try
        {
           con = bd.conectar();
           s = con.prepareStatement(query);
            s.executeUpdate();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de insertar datos"+e,
                        "Error",JOptionPane.ERROR_MESSAGE);

            bd.cierraConexion(con);
            
        }

        bd.cierraConexion(con);
        
    }
}
